# @Time : 2021/10/26 13:55
# @Author : Li Kunlun
# @Description : 存储进程输出

import multiprocessing as mp

"""
Queue的功能是将每个核或线程的运算结果放在队里中， 等到每个线程或核运行完毕后
再从队列中取出结果， 继续加载运算。
因为：多线程调用的函数不能有返回值, 所以使用Queue存储多个线程运算的结果
"""


# 该函数没有返回值，将结果存放到队列中
def job(q):
    res = 0
    for i in range(1000):
        res += i + i ** 2 + i ** 3
    q.put(res)  # queue


if __name__ == '__main__':
    # 定义一个多进程队列，用以存储结果
    q = mp.Queue()

    # 定义两个线程函数，用来处理同一个任务, args 的参数只要一个值的时候，
    # 参数后面需要加一个逗号，表示args是可迭代的，不加逗号会报错
    p1 = mp.Process(target=job, args=(q,))
    p2 = mp.Process(target=job, args=(q,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    # 上面是分两批处理的，所以这里分两批输出，将结果分别保存
    res1 = q.get()
    res2 = q.get()
    # 计算最终的结果
    print(res1 + res2)
